#include <array>
#include <vector>
#include <string>
#include <iostream>

using namespace std;

int main()
{
    array<int, 5> c  = {1, 2, 3, 4, 5};
    // 在解引用一个迭代器或调用 front 或 back 之前检查是否有元素
    if (!c.empty()) {
        // val1 和 val2 是 c 中第一个元素值的拷贝
        auto val1 = *c.begin(), val2 = c.front();
        cout << val1 << " " << val2 << endl;
        // val3 和 val4 是 c 中最后一个元素值的拷贝
        auto last = c.end();
        auto val3 = *(--last);  // 不能递减 forward_list 迭代器
        auto val4 = c.back();   // forward_list 不支持
        cout << val3 << " " << val4 << endl;

        c.front() = 42;         // 将 42 赋予 c 中的第一个元素
        auto &v = c.back();     // 获得指向最后一个元素的引用
        v = 1024;               // 改变 c 中的元素
        auto v2 = c.back();     // v2 不是一个引用，它是 c.back() 的一个拷贝
        v2 = 0;                 // 未改变 c 中的元素
    }

    for (int i = 0; i < c.size(); ++i)
        cout << c[i] << " ";
    cout << endl;

    vector<string> svec;        // 空 vector
    cout << svec[0];            // 运行时错误：svec 中没有元素！
    cout << svec.at(0);         // 抛出一个 out_of_range 异常
}